package com.elloe.lesson;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

/**
 * @author ElloeStudy
 * @create 2021-10-13 9:09
 */
public class Algo {
    /**
     * 本题算法描述：
     *     输入需要操作总数N（压栈+弹栈），输入的格式 ： 操作数 + 保存数字 (都是整数)；其中输入1，将这个数压入stack;
     *     输入非1的操作数，将stack栈顶的元素弹出
     *     最后将弹出的数，输出
     */
    public static void main(String[] args) {
        int N;   // 操作的次数
        int a =0,b=0;  // 输入的数，根据格式需要2个数，将这个数初始化
        Scanner scanner = new Scanner(System.in);
        N = scanner.nextInt();
        Stack<Integer> stack = new Stack<>();  // 定义1个stack,将输入的数储存
        ArrayList<String> list = new ArrayList<>();  // 定义一个ArrayList,将弹出的元素保存，以便输出
        // 循环 输入需要操作的数
        for (int i = 0; i < N; i++) {
            a = scanner.nextInt();
            // 根据操作符判断，需要压入还是弹出元素
            if(a == 1){        // 压入元素
                b = scanner.nextInt();   // 需要压入的数
                stack.push(b);   // 将 b 这个数压入
            }else{                           // 否者的话1，弹出元素
                if(stack.isEmpty()){        // stack 为空
                    list.add("invalid");    // 给输出的List集合,输出invalid的话，提高程序的健壮性、可读写(同时防止报错，空栈错误)
                }else{                          // stack不为空
                    list.add(Integer.toString(stack.peek()));  // 将弹出的数放入list集合里面,list里面只能放入string ，所以需要将Integer.toString
                    stack.pop();                                // 将这个元素从栈顶弹出
                }
            }
        }
        // 输出弹出的list集合
        for (String str : list){
            System.out.println(str);
        }
    }
}

/**
 *  stack.peek()：  参看栈顶的元素，但不移除栈顶元素
 *  stack.pop()：   参看栈顶的元素，移除栈顶元素
 *  Integer.toString(int)：  将string的数转变为int
 */